package com.uzai.console.service;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.util.StringUtils;
import com.uzai.common.exception.BusinessException;
import com.uzai.console.common.utils.Tools;

import java.util.Objects;

/**
 * @author mingyang.chen create in 2022/10/28 14:50
 */
public class CommonService {


    /**
     * 检查开始结束时间否是是历史数据查询
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param queryMonth 查询月份
     * @return true: 表示查询历史数据, false: 表示查询90天内
     */
    public boolean checkStartEndTimeIsHistoryQuery(Integer startTime, Integer endTime, String queryMonth) {

        //查询月份不等于空，则判断月份来查询历史数据
        if(StringUtils.isNotBlank(queryMonth)){
            //判断查询月份是否已经是历史数据
            DateTime parse = DateUtil.parse(queryMonth, "yyyy-MM");
            if(parse.before(DateUtil.date().offset(DateField.MONTH, -3))){//在3个月之前
                return true;
            }else{
                return false;
            }
        }else{
            //开始时间和结束时间都不为空
            if(startTime != null && endTime != null){
                if (startTime > endTime) {
                    throw new BusinessException("开始时间不能大于结束时间");
                }
                // 获取到三个月的时间秒数
                int beforeThreeMonthSecond = (int) (DateTime.now().offset(DateField.MONTH, -3).getTime() / 1000L);
                // 如果结束时间在90天内, 则查询
                if (startTime >= beforeThreeMonthSecond) {
                    return false;
                }else{// 90天前
                    DateTime start = DateUtil.date(startTime * 1000L);
                    DateTime end = DateUtil.date(endTime * 1000L);
                    int startMonth = start.monthBaseOne();
                    int endMonth = end.monthBaseOne();
//                    int thirtyDaySecond = 60 * 60 * 24 * 30;
//                    // 时间范围超过了一个月
//                    if (endTime - startTime > thirtyDaySecond) {
//                        throw new BusinessException("90天前时间范围跨度不能超过一个月");
//                    }
                    if (!Objects.equals(startMonth, endMonth)) {
                        throw new BusinessException("90天前时间范围跨度不能超过一个月");
                    }
                    return true;
                }
            }else{
                return  false;
            }
        }
    }
}
